#include "data_type.h"
#include <cuda.h>
#include <cuda_runtime.h>

namespace Registration {
__global__ void ComputePointVoxelIndex(PointXyz *input_point_cloud,
                                       int points_num, int3 offset,
                                       int3 voxel_size, float3 voxel_scale,
                                       int thread_nums,
                                       VolumeData *volume_data);

void ComputeVoxel(PointXyz *input_point_cloud, int points_num, int3 offset,
                  int3 voxel_size, float3 voxel_scale, VolumeData *volume_data);

__global__ void DownsamplePointCloudGPU(PointXyz *input_point_cloud,
                                        int input_points_num, float3 offset,
                                        float3 voxel_scale,
                                        PointXyz *output_point_cloud,
                                        int output_points_num);

void DownsamplePointCloud(PointXyz *input_point_cloud, int input_points_num,
                          float3 offset, PointXyz *output_point_cloud,
                          int output_points_num);
} // namespace Registration
